<?php
/**
 * Created by PhpStorm OF yuyi.
 * User: YUYI
 * Date: 2017/12/27 0027
 * Time: 下午 2:31
 * Administrator
 */

namespace app\common\util;


use app\common\model\LogException;
use think\Exception;

trait ReturnMsgUtil
{
    /**
     * 获取转成json数据的返回信息
     * @param $msg   int           信息码  1成功，其他失败
     * @param $info  string           提示信息
     * @param null|array $data        list数据或者信息数据
     * @param null|array $option      额外参数
     * @return string
     */
    function getReturnInfo($msg,$info,$data=null,$option=null){
        $arr=['msg'=>$msg,'info'=>$info];
        if ($data){
            $arr['data']=$data;
        }
        if ($option){
            foreach ($option as $k=>$v){
                $arr[$k]=$v;
            }
        }
        $result=json_encode($arr);
        trace($result,'getReturnInfo.error');
        return $result;
    }

    /**
     * 返回成功信息
     * @param string $info 提示信息
     * @param $data array|null 数据信息
     * @param $opt  array|null 额外信息
     * @return string
     */
    function successInfo($info = '',$data=null,$opt=null){
        if (isset($data['password'])){
            unset($data['password']);
        }
        return $this->getReturnInfo(1,$info,$data,$opt);
    }

    /**
     * 获取用户登录超时信息数据
     */
    function outTimeInfo(){
        return $this->getReturnInfo(3,$this->getHelpLang('login.outTime'));
    }

    /**
     * 别处登录信息提示
     */
    function loginElseWhereInfo(){
        return $this->getReturnInfo(3,$this->getHelpLang('elsewhere.login'));
    }

    /**
     * 获取错误信息格式数据
     * @param $info string 提示信息
     * @return string
     */
    function errorInfo($info,$code=0){
        return $this->getReturnInfo($code,$info);
    }


    function exceptionInfo(\Exception $exception){
        trace([
            'file'=>$exception->getFile(),
            'line'=>$exception->getLine(),
            'code'=>$exception->getCode(),
            'msg'=>$exception->getMessage(),
        ],'异常记录保存结果');
        return $this->errorInfo($exception->getMessage());
    }

    /**
     * 获取提示语句
     * @param $info
     * @return string
     */
    function getHelpLang($info){
        $configs = explode('.',$info);
        $str = '';
        foreach ($configs as $config){
            $str .= lang($config);
        }
        return $str;
    }
    /**
     * 获取提示语句(静态方法)
     * @param $info
     * @return string
     */
    static function getStaticHelpLang($info){
        $th = new static();
        return $th->getHelpLang($info);
    }

    /**
     * 返回layui ajax请求数据结构
     * @param int $msg
     * @param null $data
     * @param int $count
     * @param string $info
     * @return string
     */
    public static function returnLayuiAjaxData($msg=0,$datum=null,$count=0,$info='')
    {
        $data['code']=$msg;
        $data['count']=$count;
        $data['msg']=$info;
        $data['data'] = $datum;
        return $data;
    }

    /**
     * 返回layui ajax请求成功数据结构
     * @param null $data
     * @param int $count
     * @return string
     */
    public static function successLayuiAjaxData($data=null,$count=0)
    {
        return self::returnLayuiAjaxData(0,$data,$count,'成功');
    }

    /**
     * 返回layui ajax请求失败数据结构
     * @param int $msg
     * @param string $info
     * @return string
     */
    public static function errorLayuiAjaxData($msg=1,$info='')
    {
        return self::returnLayuiAjaxData($msg,null,0,$info);
    }
}